/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.patpro.modelo.DAO.persistencia;

import com.patpro.modelo.DAO.interfaces.AsignacionAcademicaInterfaz;
import com.patpro.modelo.javabeans.AsignacionAcademica;
import com.patpro.modelo.javabeans.Curso;
import com.patpro.modelo.javabeans.Profesor;
import com.patpro.modelo.javabeans.SemestreAcademico;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

/**

 */
public class AsignacionAcademicaJDBCPersistence implements AsignacionAcademicaInterfaz{

    private JdbcTemplate plantilla;

    public JdbcTemplate getPlantilla() {
        return plantilla;
    }

    public void setPlantilla(JdbcTemplate plantilla) {
        this.plantilla = plantilla;
    }

    public int insertarAsigancionAcademica(AsignacionAcademica asignacion) {
        String sql = "insert into t_asignacionacademica(T_Curso_ID,T_Semestre_Academico_ID,T_Persona_ID,grupo,horario,aula) values(?,?,?,?,?,?) ";
	return plantilla.update (sql,
                           new Object[] {
                                 asignacion.getCurso().getId_curso(),
                                 asignacion.getSemestre().getId_semestre(),
                                 asignacion.getProfesor().getId_persona(),
                                 asignacion.getGrupo(),
                                 asignacion.getHorario(),
                                 asignacion.getAula()
                              });
    }
    
    public int actualizarAsigancionAcademica(AsignacionAcademica asignacion) {
         String sql = "update t_asignacionacademica set grupo=?,horario=?,aula=? where T_Curso_ID =? and T_Semestre_Academico_ID=? and T_Persona_ID=?  ";
	return plantilla.update (sql,
                           new Object[] {
                                 asignacion.getGrupo(),
                                 asignacion.getHorario(),
                                 asignacion.getAula(),
                                 asignacion.getCurso().getId_curso(),
                                 asignacion.getSemestre().getId_semestre(),
                                 asignacion.getProfesor().getId_persona()
                              });
    }

    public int eliminarAsignacionAcademica(AsignacionAcademica asignacion) {
        String sql = "delete from t_asignacionacademica  where T_Curso_ID =? and T_Semestre_Academico_ID=? and T_Persona_ID=?  ";
	return plantilla.update (sql,
                           new Object[] {
                                 asignacion.getCurso().getId_curso(),
                                 asignacion.getSemestre().getId_semestre(),
                                 asignacion.getProfesor().getId_persona()
                              });
    }

    public List<AsignacionAcademica> listarAsignacionAcademica() {
        String template = "SELECT"+
                          "  t_asignacionacademica.T_Curso_ID,"+
                          "  t_asignacionacademica.T_Semestre_Academico_ID,"+
                          "  t_asignacionacademica.T_Persona_ID,"+
                          "  t_curso.descripcion as desc_curso,"+
                          "  t_semestre_academico.descripcion as desc_semestre,"+
                          "  concat(concat(t_persona.apellidos,' '),t_persona.nombres) as nombres_completo,"+
                          "  t_asignacionacademica.grupo,"+
                          "  t_asignacionacademica.horario,"+
                          "  t_asignacionacademica.aula"+
                          "  FROM"+
                          "  t_asignacionacademica"+
                          "  Inner Join t_curso ON t_curso.T_Curso_ID = t_asignacionacademica.T_Curso_ID"+
                          "  Inner Join t_semestre_academico ON t_semestre_academico.T_Semestre_Academico_ID = t_asignacionacademica.T_Semestre_Academico_ID"+
                          "  Inner Join t_profesor ON t_profesor.T_Persona_ID = t_asignacionacademica.T_Persona_ID"+
                          "  Inner Join t_persona ON t_persona.T_Persona_ID = t_profesor.T_Persona_ID ";

         List resultado = plantilla.query(template,new Object[]{},
                                    new RowMapper(){
                                        public Object mapRow(ResultSet rs,int rowNum)throws SQLException,
                                                DataAccessException{
                                            AsignacionAcademica asignacion = new AsignacionAcademica();
                                            
                                            SemestreAcademico semestre = new SemestreAcademico();
                                            semestre.setId_semestre(rs.getInt("T_Semestre_Academico_ID"));
                                            semestre.setDescripcion(rs.getString("desc_semestre"));

                                            Curso curso = new Curso();
                                            curso.setId_curso(rs.getInt("T_Curso_ID"));
                                            curso.setDescripcion(rs.getString("desc_curso"));

                                            Profesor profesor = new Profesor();
                                            profesor.setId_persona(rs.getInt("T_Persona_ID"));
                                            profesor.setNombres(rs.getString("nombres_completo"));

                                            asignacion.setSemestre(semestre);
                                            asignacion.setCurso(curso);
                                            asignacion.setProfesor(profesor);
                                            asignacion.setGrupo(rs.getInt("grupo"));
                                            asignacion.setHorario(rs.getString("horario"));
                                            asignacion.setAula(rs.getString("aula"));
                                            return asignacion;
                                        }
                                    });
         return resultado;
    }

    public AsignacionAcademica buscarAsignacionAcademica(AsignacionAcademica asignacion) {
        String template = "SELECT"+
                          "  t_asignacionacademica.T_Curso_ID,"+
                          "  t_asignacionacademica.T_Semestre_Academico_ID,"+
                          "  t_asignacionacademica.T_Persona_ID,"+
                          "  t_curso.descripcion as desc_curso,"+
                          "  t_semestre_academico.descripcion as desc_semestre,"+
                          " concat(concat(t_persona.apellidos,' '),t_persona.nombres) as nombres_completo,"+
                          "  t_asignacionacademica.grupo,"+
                          "  t_asignacionacademica.horario,"+
                          "  t_asignacionacademica.aula"+
                          "  FROM"+
                          "  t_asignacionacademica"+
                          "  Inner Join t_curso ON t_curso.T_Curso_ID = t_asignacionacademica.T_Curso_ID"+
                          "  Inner Join t_semestre_academico ON t_semestre_academico.T_Semestre_Academico_ID = t_asignacionacademica.T_Semestre_Academico_ID"+
                          "  Inner Join t_profesor ON t_profesor.T_Persona_ID = t_asignacionacademica.T_Persona_ID"+
                          "  Inner Join t_persona ON t_persona.T_Persona_ID = t_profesor.T_Persona_ID "+
                          "  where t_asignacionacademica.T_Semestre_Academico_ID=? and t_asignacionacademica.T_Curso_ID=? and t_asignacionacademica.T_Persona_ID=?";

         List resultado = plantilla.query(template,new Object[]{
                                                        asignacion.getSemestre().getId_semestre(),
                                                        asignacion.getCurso().getId_curso(),
                                                        asignacion.getProfesor().getId_persona()},
                                    new RowMapper(){
                                        public Object mapRow(ResultSet rs,int rowNum)throws SQLException,
                                                DataAccessException{
                                            AsignacionAcademica asignacion = new AsignacionAcademica();

                                            SemestreAcademico semestre = new SemestreAcademico();
                                            semestre.setId_semestre(rs.getInt("T_Semestre_Academico_ID"));
                                            semestre.setDescripcion(rs.getString("desc_semestre"));

                                            Curso curso = new Curso();
                                            curso.setId_curso(rs.getInt("T_Curso_ID"));
                                            curso.setDescripcion(rs.getString("desc_curso"));

                                            Profesor profesor = new Profesor();
                                            profesor.setId_persona(rs.getInt("T_Persona_ID"));
                                            profesor.setNombres_completo(rs.getString("nombres_completo"));

                                            asignacion.setSemestre(semestre);
                                            asignacion.setCurso(curso);
                                            asignacion.setProfesor(profesor);
                                            asignacion.setGrupo(rs.getInt("grupo"));
                                            asignacion.setHorario(rs.getString("horario"));
                                            asignacion.setAula(rs.getString("aula"));
                                            return asignacion;
                                        }
                                    });
         return (resultado.size()>0)?(AsignacionAcademica)resultado.get(0) :null;
    }

    public List<AsignacionAcademica> listarAsignacionAcademicaPorSemestreProfesor(int id_semestre, int id_profesor) {
        String template = "SELECT"+
                          "  t_asignacionacademica.T_Curso_ID,"+
                          "  t_asignacionacademica.T_Semestre_Academico_ID,"+
                          "  t_asignacionacademica.T_Persona_ID,"+
                          "  t_curso.descripcion as desc_curso,"+
                          "  t_semestre_academico.descripcion as desc_semestre,"+
                          "  concat(concat(t_persona.apellidos,' '),t_persona.nombres) as nombres_completo,"+
                          "  t_asignacionacademica.grupo,"+
                          "  t_asignacionacademica.horario,"+
                          "  t_asignacionacademica.aula"+
                          "  FROM"+
                          "  t_asignacionacademica"+
                          "  Inner Join t_curso ON t_curso.T_Curso_ID = t_asignacionacademica.T_Curso_ID"+
                          "  Inner Join t_semestre_academico ON t_semestre_academico.T_Semestre_Academico_ID = t_asignacionacademica.T_Semestre_Academico_ID"+
                          "  Inner Join t_profesor ON t_profesor.T_Persona_ID = t_asignacionacademica.T_Persona_ID"+
                          "  Inner Join t_persona ON t_persona.T_Persona_ID = t_profesor.T_Persona_ID "+
                          "  where t_asignacionacademica.T_Persona_ID=? and t_asignacionacademica.T_Semestre_Academico_ID=?";

         List resultado = plantilla.query(template,new Object[]{id_profesor,id_semestre},
                                    new RowMapper(){
                                        public Object mapRow(ResultSet rs,int rowNum)throws SQLException,
                                                DataAccessException{
                                            AsignacionAcademica asignacion = new AsignacionAcademica();

                                            SemestreAcademico semestre = new SemestreAcademico();
                                            semestre.setId_semestre(rs.getInt("T_Semestre_Academico_ID"));
                                            semestre.setDescripcion(rs.getString("desc_semestre"));

                                            Curso curso = new Curso();
                                            curso.setId_curso(rs.getInt("T_Curso_ID"));
                                            curso.setDescripcion(rs.getString("desc_curso"));

                                            Profesor profesor = new Profesor();
                                            profesor.setId_persona(rs.getInt("T_Persona_ID"));
                                            profesor.setNombres(rs.getString("nombres_completo"));

                                            asignacion.setSemestre(semestre);
                                            asignacion.setCurso(curso);
                                            asignacion.setProfesor(profesor);
                                            asignacion.setGrupo(rs.getInt("grupo"));
                                            asignacion.setHorario(rs.getString("horario"));
                                            asignacion.setAula(rs.getString("aula"));
                                            return asignacion;
                                        }
                                    });
         return resultado;
    }



}
